{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "这个作业中，我们使用tensorflow来实现一个简单的手写数字识别的网络，并用这个网络来做个 简单的识别示例。\n",
    "\n",
    "本作业中，需要参与者应用视频中学到的知识：dropout，learingratedecay，初始化等等，将网络最终在validation数据上的得分尽可能的提高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先导入一些用到的库。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先来看看数据长什么样子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到images里面有数量不等的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#输入数据\n",
    "#输入x\n",
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "#label值y（非独热）\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义随机初始化函数initialize，为正态分布，标准差0.1\n",
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "#L1层神经元的个数\n",
    "L1_units_count = 100\n",
    "\n",
    "#使用定义的初始化函数随机初始化权重\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "#计算logit输出和激活后的output输出\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "\n",
    "#L2层神经元的个数（本处L2层为输出层）\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。\n",
    "\n",
    "试试看，增大减小学习率，换个优化器再进行训练会发生什么。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#计算损失\n",
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=y))\n",
    "#优化过程（每运行一次optimizer就前向传播一次再反向传播一次）\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。\n",
    "\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "#argmax函数：输出数据制定维度上最大数据的索引，此处为输出pred数据第二维数据的最大值的索引（第一维为batchsize）\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "#reduce_mean:取均值   cast：强制数据类型转换\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.432423, the validation accuracy is 0.876\n",
      "after 200 training steps, the loss is 0.583313, the validation accuracy is 0.8936\n",
      "after 300 training steps, the loss is 0.6762, the validation accuracy is 0.9178\n",
      "after 400 training steps, the loss is 0.193443, the validation accuracy is 0.9288\n",
      "after 500 training steps, the loss is 0.522674, the validation accuracy is 0.867\n",
      "after 600 training steps, the loss is 0.184621, the validation accuracy is 0.946\n",
      "after 700 training steps, the loss is 0.222885, the validation accuracy is 0.9446\n",
      "after 800 training steps, the loss is 0.0735426, the validation accuracy is 0.947\n",
      "after 900 training steps, the loss is 0.267879, the validation accuracy is 0.9526\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9542\n"
     ]
    }
   ],
   "source": [
    "#使用Session()启动计算图，类似面向对象中的实例化\n",
    "with tf.Session() as sess:\n",
    "    #变量初始化\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "    \n",
    "    #一个batch一个batch的输入数据进行训练\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAHiCAYAAACtERYWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XeYFMXWBvD37AJLWHKWtOSooCgGDKAiJswYLmLWa8Rw1WtAxRzu/cxZQa45Yc4JVESJIkpUAQmSc1zY3fP9UbXdXcPM7uzOTM+G9/c8PJyeqqnp3uru6q7qIKoKIiIiSr2MdM8AERFRZcFGl4iIKCRsdImIiELCRpeIiCgkbHSJiIhCwkaXiIgoJGx0iYiIQlLuGl0RGSEiO0Vks4jUivM7f4rIDhF5uYg8KiJbROTu5M1t+ETkGxHZLiLj0z0vpVHZ61dEsuyy7xSRu9I9P8nAOq1YdSoio23dLIwzfye7/PkickGMPP1EpMDmOzKpM5xk8SxPUdLS6NoZDv7LF5HHSlDEG6qarapbbHmfRpS3Q0R+Lcysqu0B3BNHuT1V9ebAfD4rInPtynBOlOW4WkSWi8hGERklIlmBtBwRGSsiW0VkjogcHutH7UY5ypazXESuCaS1EpGfRGStiPxfxPc+FZG9g5+p6qEALo5jWVPCLstIEflLRDaJyHQROaqExUTW73Ui8pstb4GIXBfMnED9DrLlbhaRCSLSLWI5HhKRv0VknYg8KSJVi1juTBG5y+bfJCI/i0g9m3aYne/lInJ64Dv1RGSaiNQOLEuuqmYDeCWO5QmNiFwuIlNEJFdERpeiiMg67W+3jw3Rdt5lpE5jbv/lvU5FpIGIvGsPWv4SkX+UsIgHVDUnUF7MfZiqzrPL/30xZf5t15HPbJkiIjeLyCJb7usiUidiGd4QkTUislpEXgmmRyzvfiLypd2PrhKRt0SkeSD9HyKyTEQWikj/wOft7XqUWYrliSotja79w2bbGW8GYBuAtxIo76iIMickUl7ALwAuBTAtMkFEBgK4AcBhANoAaAfg9kCW1wD8DKAhgJsBvC0ijWP8zggAHW05/QFcL/7R3o0A/gegLYATChtZETkNwAJVnZLA8qVCFQCLARwCoC6A4QDeFJGcBMoUAGcBqA/gSACXB3d0pSpQpCPMTvBiAPUAfAjgAxGpYrPcAGBvAD0AdAKwF8yyxHI7gAMA7A+gDoChALbbtIcBDAIwEMCTgQ34XgD3qeqmRJYlJH8DuAvAqCSVt8WWdV1xGeOVgjqNuf2j/NfpEwB2AGgKYAiAp0SkewLljUDsfVhpnQWzHfUFsBuAGgCCJ2d3wewT2gJoD7MsI2KUVR/AswBy7DxuAvACANj14z6Y9eHyiN94FMDVqpqf4LJ4ykL38skAVqKURw2R7M79IAAvJlqWqj6hql/D33kGnQ1gpKrOVNV1AO4EcI6dh8IN+jZV3aaqYwD8CrOs0ZwN4E5VXaeqswE8V1gWzAr1japuADAZQDt7NHcDgJsSXcZkU9UtqjpCVReqaoGqfgRgAYDeCZT5gKpOU9U8VZ0L4H2YDTERAwF8r6rjVTUPwP0AWsAcLABmh/qoqq5V1VUwG9950QoSkfoArgJwoar+pcZvqlq43tSy07/A7OgaikgfAG1V9c0ElyMUqvqOqr4HYE2Sypukqi8BmJ+M8qyk1amdx6K2/3Jbp2K6+E8GcIuqblbV8QA+gGngSquofVhpDYLZxy5W1c0w9XmaiNS06W0BvKeqG+3+8V0AUQ8cVPVTVX3L5t0K4HH4+5CGAJaq6jIAX8GcQEFETrGfT0xwORxlodE9G8CLGngItIisF5EDS1neWTAb3sJkzFwRusMcCRf6BUBTEWlo0+ZHHO3+gigrhN1hN49SVmHe3wAMsF2VvQHMhGngH1bV9UlalpQRkaYwZxUzA5+Vun5FRGAOqmYWlzee4iJigTkLipXeUkTqRilndwB5AE6xXWvzROSyQPpKEekpIj0BFABYB+ARAMOSsAxlQoLbbDIlq06LU57rtBOAPFWdF/jM2+eISGtbn63jKSyOfVgiIusrC+aMGjBn68eKSH07DycD+DTOcg+Gvw9ZBXPQ1BLAAAAz7fDAcJiexqRKa6MrIm1gjkL/F/xcVevZo6/SOAvA6ARnLR7ZADYEpgvj2lHSCtNrY1fZEd+PzHsvTCPzLYAnAVQDsAeAD0XkVRH5TkQuL+1CpJIdL3sFwP9UdU7h5wnW7wiY9faFBGfvKwCHiLmAoxpMr0E1AIVH0Z8BuFJEGotIM/g705q7FoWWMF3pnWCOvk8BMEJEBtj0i2F2yM/CnE1cYn+/uoh8LmZs85Bdiy0/EqzTZElmnRanPNdpNoCNEZ95+xxVXWTrc1EJyissY5fyEvAZgAvEXB9TF8C/7eeF9TUNpn7X2H/5MPvIIonIHgBuhR3aUNUCmPp7G8C1AC6EGS56DMAeti4/F5EeMYoskXSf6Q4FMF5VFySjMHuk3Qzmj1dUvuCFV0NK+XObYcbuChXGm6KkFaZHG+fZHPF9J6/tCjtNVXvCbOSPAbgCpnv5NwCHA7hYRLqWcjlSQkQyALwE0/WWlIMCe3BxFoBjVDW3iHzF1q89CDgbpptpGYBGAGYBWGKz3A0zJj8d5hqB9wDsBLAiSnHb7P932OGEGQBeB3C0/a3pqtpPVfe1v3EezEVCz8Ns3OcCeMmexVMUaajTIpXzOi3J/ine8grLiKs8cS98jXVGPQrm2phxMGelY+3nhfX5JoB5MI17HQB/Aoh5tbv93Q4wZ8NXqqo3pKmqX6vqfqp6CACFGfsfDTNMeQ5M7+LzRZUdr3Q3umch4iw3QWcDeMf2/8cUceFVaa8onAmgZ2C6J4AVqrrGprWTwBWMNn2XLlE7HrwsSlnRuk8vAvCTqv4G06U5RVV3wIwX717K5Ug6u6MZCXNhw8mqujMJZZ4He+Gaqi4pKm+89auqb6tqD1VtCOA2mIssJtu0bap6uaq2UNV2MEfSU+1RcaQZhUUGi4/xsw8BGK6q2+DX4UIAVQHEutCu0ktDnZZEeavTeQCq2AvPCsXa5xSrhPuwwu9kB/5FPaO214Tcpqo5qtrSlrfU/gOAXgCeUXMdyWYAT8Me6EZje1a/ghl7filGHoE5aBsGc9CWqap/waxDe8QquyTS1uiKyAEwFzkk4ypjiEgNAKciiV3LIlJNRKrDjCVUFZHq9gwOMEdA54tINzveOrzwt+1YyXQAt9nvnAhTYWNi/NSLAIbbsYkuMN0bznKISBMAl8G/Om8BgP4ikg1zVJbMC1IS9RSArgAG2R1RQuyZzT0ABqhq0pZTRHqLudWnMUw34QeF3eAi0kJEdhNjPwC3wOzEd6Gqf8JcCHizmFsnugI4HcBHEb83AEB1NReXAaYODxVz1WgWknSRUiqISBW7LWQCyLTrdZXivldEeRm2vKpmUqrbLuFE5zMpdWrzF7X9F+Ypd3Wq5ratdwDcISK1RKQvgONheqZKq9h9WEmJuSWova2vbgAehOlNKjxImgzT/VzD7v8vgn8AHFlWCwDfAHhcVZ8u4mcvADBNVafD1F0N+9v9kax9rKqm5R+AZwC8FCNtM4CDYqSNAPBylM/PAPAXACnJ9wLpCqBDxGfj7OfBf/0C6dfAdE1thBljzAqk5djvbwMwF8DhgbQhAGYGprNgulI22vKuiTJ/LwIYHJhuBWAizAUcD0bkPQem2z4d9drG/p2223os/DektPULsyPbGVHe00mo3/EwXWBr7fpYK5B2MICFALba+hsS8d1PAdwUmG4BMwa1GWbj/GdE/iyYA7E2gc8Os7+xDMDpEflHA7grHXVYRL1EbgsjEqjTflHKG1fG6nRclHkMbv/ltk4BNIDpXt8CYBGAfwTSWtv6bB3ju7ssB+Lbh40DcEGMMvsBWBLxWSdbT1th9u3XRKS3hbktbI2t788AdAykzyysY5iDK4W7D9kcUV4jmCG7OoHPhgBYbuu0f7zLU+TfPt2VX4qVZbhdUdYHN6hivjPX/pFHFZFnO8zg/53pXsYE/z5f2p3O1+meF9ZvqZY/yy77FphbztI+T6xT1mnE8jxn6+bPOPN3tMu/FcA5MfIcDHOCsh7AwHQvY6LLU9Q/sYUQERFRiqX7QioiIqJKg40uERFRSNjoEhERhaTUl/yXxoCMwRxATpMvC95K+k36rM/0SUV9AqzTdOI2WrHEqk+e6RIREYWEjS4REVFI2OgSERGFhI0uERFRSNjoEhERhYSNLhERUUjY6BIREYWEjS4REVFIQn04BlEqLLxrfy/Or+4+C6Bx91Ve/GPPWK8zBtp/c64X155Uw0lr+uiERGeRiAgAz3SJiIhCw0aXiIgoJGx0iYiIQsIxXSqX1n3c0Yt/6/V4XN/ZWcSj3+f0f96LX9m7uZP25peHeHH+7N/jnEMqS6R3d2f64w9e8uLdn77ci1vdyfH7sGXWq+vFcx9v58XBbRIAhq/s7cW/DunkpOXPmpeiuUs+nukSERGFhI0uERFRSNi9TOVCsDsZAH7o9Xpc33t6vd9d9eCPA7w4p80qJ98X3d7x4iG1lzlpd5/TyIvb/Zvdy+XRyn3qONN5yPfimn/zlbPpVNC2pRf/2u8ZL44cDrqryVQv7nniAU5aK3YvExERUSQ2ukRERCFh9zKVWXmH+VcrftPziYjUql708Dr/Ssaxp+3tZvt7pRd2WjfFizOqV3ey3TNxdy++qdGv7nzUz4t7nqlsWrdHvjO9JC/XixuO/DHs2anUqrRq6Uy3ffaPNM1JevBMl4iIKCRsdImIiELCRpeIiCgk5XpMd82F+zvTrYf6YwNzVjZ10nbk+mOALV7z45pLNjv5CqbPSuYsUgI2t6jmxRkRx4fBcdxxx/njsfnz58ZV9h+37+lMv9rg/wJTWU5ay894bFoead9eXvz9sQ86aYd8d4UXd8DPoc1TZbXoVv8Wn95HuvvYB5p/X+Lysg9wb/lbfItffqMZ/jUYNd6fVOKyU417EyIiopCw0SUiIgpJue5evv66V53pk2ut8yfaF/HFfn64MG+rk/TIqv6Jz1icJq1s48W1/q+uk1bl66mR2Sudei/6t3KcMuVMJ03WbfTivGULS1z2BUd/5UxnZ2TFyEnl1dpuNby4eWZNJ63F21Ujs1MKzfjnY168U/OLyBmfcT1fcT/o6YfvbvFfWDJq0wlOtirfpH+/yjNdIiKikLDRJSIiCgkbXSIiopCU6zHdR2863Zm+dQ//GKL+bPcVFeu6ihdX22O9Fz/Q4x0n30PNJ3rxx1uzvfiYmu6tRUXZpju8eGJuLS/uV32nmzHwWx1O+6eT1OnruH+uUkjGS6oX3u3fYnZ+vf9GpPqPhfzXsv2clNpfzfbnI+G5oLAcdql/TcB7W+o5adnj/FvLWKepUXWcP7ZaVTITLu/nHQVevHBnYyftxFprvfjUbP/Rr6e+9KyT79gWvZFuPNMlIiIKCRtdIiKikJTr7uVab0+MmI6dt06Mzx9r1s+Zvqtvjv+db/0nXD3Qr0Pc81Vlm98NUmuG/0L0ht+NcfLtXi3wZKyFvIUhFdYP9buUfzjL71Kum+G+ZejHXL/7a/pd7tOqamwse0+1oV1ldu/sTN/T5DUvHrnRfbNN/voNocxTZbLthD7O9LnN3/Li4G1C8d4y1OPri53pxl/7t/VlbXDLuLGff/746+BHY5a55Eb/yVUt750Q13wkG890iYiIQsJGl4iIKCTluns5GfKWr3Cma43xp4MdGLXeXlOq8ldc4Hdvdq/m/rn/u9bvDst5Yb47X6X6NYq0ei//KvbILuWgs8dd4MWd3mN3cnm0dEDDmGlTN7WJ+GRbamemkgh26d/1oHul8N7VdgRzxiwj+ASp4WNP9uKu189x8uVv3IhYOv/uvwBl0nH+dt4na7uT79NLHvDiI6pf76Tl3OM/rUpzc2P+VqJ4pktERBQSNrpEREQhYaNLREQUkko/ppsKVdq08uLHb3rciyOfyvLWI4d7ccNlP4ISt+NLd+zuxy7Bl9P7Yz09fzzbydf1X396MZ9QVD5t7LYzZtr0x3s50/XA7S0ZCgLXqbhjuLGd99eRzvSm0/y3QXVa4l9PUZLtMPjEuktH+7caTfnnw06+5pn+b0073007+R1/n6C/zEaq8EyXiIgoJGx0iYiIQsLu5RSYc3ULL94ny3/Rwswd7m0KDWZtDW2eKrIq7XK8+M4Obzlp9QO3CU0N3AXQ5k638yp/3bqUzBulVu5R+3jx+0c85qTdsdp/uH2DMTOctAJQmG5asbcXb7zAvbUrf8nvSf2tnDGrvfiWE9yXl9zXbHJSf6s0eKZLREQUEja6REREIWH3chLkHrOPMz3tlIcCU/5Dui+58konX40JfPJRMrR/c6kX71kt9nHkGYEHqHf6Jf3dTJS4JYf6u7A9qrlPHDt74e5e3GSL+3QjSr6i3pk7Y6/g+82T2528C/GH9KpkuAMJRc3j37f7cbMTkj5XHp7pEhERhYSNLhERUUjY6BIREYWEY7pJsOgo99glW/xx3DMWDPDimp/94uRTUGmtO9t/e9PtTYNPncpy8p290H/qV9fr//BiPnWqYmjcY6UX56s7flfl/fphz06lM/eSml4c78vpU23hSf4tSW83dq+b2amZgdid391u8+NU3lLGM10iIqKQsNElIiIKCbuXSymjdm0vHnrQeCdtY4H/4uSV97Tz4qxc3qZSWlVa7OZMHzRsohdnZ2RFZvf8OKuDF3dax79/RVClrf9Si/929p9A9tyGVk6+BqP4UoNUG37Qh2n53SqtWjrTm3r7+4enz30yrjIm5bq3mMmOvMRnLA480yUiIgoJG10iIqKQsNElIiIKCcd0S+n3Ed29+KNG7hjC8b+f7MVZn3AcMRlm3+SO173XLPpYUv9fBzvTvE2o4vn9n/743X6B4fwLp/V38rXCb2HNEoVs1u3NnOmZRzwe1/fGbG7kxU9d6+4rqs8O57G8PNMlIiIKCRtdIiKikLB7OU4bznRfhjzjtEe9+M+8nU7a5vv9y9mzsCy1M1ZJTD3uoYhPot8mVPdS91kyeXw5fYVT0Gp71M+3ra8e9XOqGKqOa+7F9zYfU6oyRi89wIurf5iet7zxTJeIiCgkbHSJiIhCwu7lIgSfgnTVLW84aVni/+lO/2Wok9b4U16xnC47m9Z1pqvuaFHiMvJXrXamNTfXiyXL79bObNwIseQ3rudM//6vanH9tub7L+DucsUfTlr+xo1xlVHRPbnvy1E/b/Fp7BeUU2pkij+cU9QL4jf+Y7+YabffMdKL+9eIPnQQWf6uL1eIr+710KVx5UslnukSERGFhI0uERFRSNjoEhERhYRjuhGkiv8n6fnREi8enL3GyffKpiZe3PQW99gllS9ApqJ9/PaohMs44OcznOnVK+p4cf3Gm7x4Yu9XE/6tonQbfrkz3e76yvnWnO2D+jjTB1YP3urBXVg63ffGKV586vkPx8z33X+e8OKiXna/U+P73aLKCOrx9cXOdEdMi+8HUohnukRERCFho0tERBQS9s1E6tnZC+9s8lLMbE/c4z8su94vlbPbL0zHzxriTH/d4+2U/daEPV8r1fe26g4v3qmxBxmOnnGOF2+YHvu2oxbjw3mpdlm36Di3zzF4u94dq3f34uz3pzr54uyppAS0e8O/vW7Sme4Twfpkxb79J1GRL6B/dvkhXrzuUv9lCF0WRNx2l7I5ih/PdImIiELCRpeIiCgkbHSJiIhCUunHdDO7dXKmL3r9/aj5uo26zJnOeemnlM0T7arGwAXOdPd7/NtpNM61uHaXtV5cktt9un9/rv9bi2rFzNfu7c3+xKRfY+arj9+jxuTLrOPfpvXvvp/EzPfqpwd7cbs8XlsRtvxZ87z41msucNIWD/Kva5h31DNJ/d1LR7m3ArW6e0Jgqmy/WYxnukRERCFho0tERBSSSt+9POfS+s70oJrR3+TSctwO9wPlDQnp1PamxLoSj0Xv+H8LMxL6LSq5gsCbnWZt3c1JO3zp3l7c8Z6ZXlwWbgepzGq8774UvlNgpO7gM/zhuarnrHDyfdbdf4PbEb+d7sUFo5s4+dR/ARdypq9y0spT3fNMl4iIKCRsdImIiEJSKbuXgw9Q/3rQ/0Wk1gx3ZohoFxroXp67t5tWDX95cXnqVqzM6rwWuNsj4oFvJ8LfH9fC/EDKfMRSnuudZ7pEREQhYaNLREQUEja6REREIamUY7p/98304tZVYo/hBl9UX3Wje8sQbxgiIqKS4pkuERFRSNjoEhERhaRSdi8X5d413bz4x4E5XqzLYj/AnoiIKB480yUiIgoJG10iIqKQsNElIiIKSaUc0213g/+GmqNv2KuInMtTPzNERFRp8EyXiIgoJGx0iYiIQiLKl7ETERGFgme6REREIWGjS0REFBI2ukRERCFho0tERBSSct/oishoEdkhIgvjzN9JRDaLSL6IXBAjTz8RKbD5jkzqDCeZiBxu57NARA5P9/wkSkRGiMhOu0y14vzOn3YdeLmIPCoiW0Tk7uTNbWrEszzlCbdROd/Op4pIh3TPT6Iq+zYqIll22XeKyF0l/X6ZanRFpKOIbC/FzuYBVc2JUl4DEVklIuMLP1PVeaqaDeD7Ysr8W1WzVfUzW5aIyM0iskhENorI6yJSJ+L3DheRaXbFWSIip8ZYzptspRX+22Z3II1s+nUislpEZorI7oHv9RWR94JlqepXdnkWFbM8oRGRy0VkiojkisjoUhTxhv3bb7Hl9ReRsSKyIdqOW1XbA7gnjnJ7qurNgfkcJCK/2TqYICLdAmlPR9RRrohsilWwiBxq636jiMwXkYsCaT1tXa4WkWsCn1cVkYki0qqUyxO68ryNBhr/YL1mRitYRHqIyOe2zna5xUNEHhaRdSLyo4i0DHz+DxF5NJhXVUfa5SkzRKSriHxjt6k/ROTEEhYRuY3WE5H/ichK+29EMHMC22hR21Wx++SIZV5o97WFdf9FIO0wEVkgIstF5PTA5/Xs79cOLEuurc9X4lieXZSpRhfAEwAmJ7G8+wHMTlJZZwEYCqAvgN0A1ADwWGGi3WG/CuBmAHUB9AQwNVpBqnqPXWGzbeXdD2Ccqq4WkeYAzgfQDsBTAO615VcB8H8ArkrS8qTS3wDuAjAqSeVtsWVdl6TyICIdYTaaiwHUA/AhgA/s3xmqenFEHb0G4K0YZVUF8C6AZ2Dq/jQAD4pIT5vlXgDXwqwTN4tIM/v5NQDGqOriZC1XCMrtNmo9EKxXVc2PUdZOAG/CbIsOEekDoDeAZgDGA7jBfl4XZh0dnoRlSRm7jr8P4CMADQBcBOBlEemUQLEPAagJIAdAHwBDReTcBOezuO0qnvqONChQ90cEPn8YwCAAAwE8GTgYuxfAfaoa84C7pMpMo2uPLtYD+DpJ5R0AoAeAF5JRHkyFjFTVxaq6GWZncZqI1LTpwwE8o6qfqmqeqq5R1T/jmE+BWXn+Zz9qDeBnVd0I4CuYxhcwje0HqrowScuTMqr6jqq+B2BNksqbpKovAZifjPKsgQC+V9XxqpoHU58tABwSmVFMF9rJ8OsoUgMAdQC8pMZkmIak8My5LYBvVHUpgN8BtBaRNrbMh5K4TClVAbbRuKnqXFUdCWBmlOS2AMarai7M36JwG70bwH/stluWdYFppB5S1XxV/QbADzANWGkNgjmg2Wr3USMBnJfgfBa3XSWtvgHUUtXfVPUXADsANLQHV21V9c0El8NRJhpd2yVwB8yRf2RaaxFZLyKtS1BeJoDHAVwOIJlP/5CIOAtARzu9n/3tX0VkmYi8LCIN4ijzIABNAIyx038A2F1E6gE4HMBM2/14OoD/JmEZ0s7W54Hpng/sWp8C0whEOhnAKgDfRStEVVfAnAmfKyKZIrI/gDYwZ0EA8BuAI2w3ZA6APwE8AuA6Vd2ZhOVIuQqyjQLApSKyVkSmisjJpfyNmQAOEpEaAA6D2Ub3BtBZVV8tZZnp5qz7pdxGI//20baluMWxXUX7zcj6jvSKHc74InDGDAArxQwD9QRQAGAdzDY6LJFliKZMNLoA7oQ5YlkSmaCqi1S1nqqWZMxyGICJqhq1e7eUPgNwgYjk2G6kf9vPC4+qWsIcKZ4MU+nxdHUAwNkA3rZHalDVNTBHzN8AOAamW/IR+3snisi3IvJ+cBypvLH1Ob74nCn1FYBDxFyQUw3ATQCqwa/PoLMBvKhFP77tNQC3AsiFGYu8OdBtfC2ASwB8AOBqmO6wTQAW2Lr8VkQGJ2OhUqgibKOPwmybTQDcAmC0iPQt6Y+o6m8wB8k/wfRMPWDLHiYiw0TkOxF5xR44l0VzAawEcJ2Y6wqOgOnh8db9UmyjnwG4QURqi7lY7DxE35ZKqqjtqrj6jjQE5qC3DYCxAD4P1NHFMPvZZ2H245fA7COqixnbHysiu/SClUbaG10R6QVzRpeUbjYR2Q1mg765uLyB7wQvrIh1tD4KZgUYB3OkO9Z+XrgT2gbgBXsRyGaYiwaOLuZ3awIYjIhuS1V9TVX3UtWjYI4WcwH8DHOmOwhmbLFCnPWmgoh8GqjPIdHyqOocmMb0cQDLADQCMAt+fRaW1RpAPwAvFvF7XQC8DjNMUA1AdwDXi8gx9rf+UtWjVXUvmLG0O2Ea4v8CeAPAcTBjVfH0jISuomyjqjrNDvvkqeonMGP6J5VmGVT1IVXtqaqnATgVphckA2Z89DCYbtAbSlN2qtnelRNgDuqXA/gXzPj1LgdUJTAMZh/4O8w6/lpR5cWzjRa3XaH4fbJDVX9Q1W22C/xemKGSg2zadFXtp6r7wuwHzoPZhz8P4HYA5wJ4yQ4HJqQsvNqvH8zRxyK7PNkAMkWkm91JlVQfAM0BzLLl1QBQQ0SWA2gR7cKJyCsLRaRdlDwFAG6z/2CPDpfafwAwA243WTxdZicCWAuz0uzCdl/dA+AomCP0xaq6UUQmw5yZURT2YCWefG8DeBswVynCXDQTeZHQUAA/qGpR48k9AMxT1c/t9FwR+Rim3j6OyHsrgOdUdYWYK9OHq+oGEVkCoAOASfHMe8j6oWJso7t8BW73ZImJSFOYhnZ/mAOJvSA2AAAgAElEQVTiGaq6026jVyZSdiqp6gwErl8QkQmIfc1CPOWthTmTLCzvHhSxLse5jRa5XZWivneZDUSv/4dgtsttdhudoqo7xFzY1Riml6DU0n6mC3M63x5AL/vvaZgd1cBSlvcpzA6isLxbYc4SexVxpWKxxNza0F6MbgAeBHCHrXjAXAxyroi0s2ewN8BcHViU4rothwMYrap/w9wS1Nlu5P2R3IuKkkpEqohIdQCZMDvn6mKvCi5leRm2vKpmUqrbLuFE57O3HStqDLMefmDPgIPOAjC6mKJ+BtBRzO0NIiLtARwLcyAW/L1uMA3YU/ajBQAOtXXaEWXotq8IFWIbFZFTRCTbrk9HADgTpss/Wlli17lqdrq6iGRFyfoggBGquhWmPvcRkWyYei7L2+gedplqisi1MAdBoxMor72INLTb01EwByIlvoc1QpHbVRz75OD8tRZzy2U1u9zXwfRu/RCRbwCA6qpauO8u3Ea7w4wXJ3xxaNobXXuqv7zwH4DNALar6irA+2MV1aUUWV5uRHkbAOy0cSIaAfgE5vaVTwGMUtVnA787CqYLciKAv2C6hL1BeLsMBwWmWwA4FDG6LW3XyhEwY0VQ1WUA7oPpRhkG4MYElyeVhsN0Nd0As2PbhsBtFJF/izgcbMv4BGYMbRuAL4r8Rnwegelimgtz4cSFwUQxF260RJRbhWz32E0AoOYq9fNg6mojgG9hxvyej/jaEwCuDDQsN8LU5UwA9yRhHU2JirKNwpx5LoWp8/8AuFBVx8VYhjYw61nh1cvbYNYTj4gcCqCeqr5rl2sSzMHIYpgD4/sSXJ5UGgozrLISpjt8gJqrsQGUahvtDeBXmGsV7gUwRFWjXfkdtzi2qyLrW8y99k/bydowB7vrYNaBIwEcZa+hKcyfBbNeBHsoroA5yPwKwKWJHBQGF6xc/wPwHMxO4M8483eE2ei2AjgnRp7Cnfx6AAPTvYzFLM9hdj63Aeif7vlJwvIMtxvRepjL+OP5zly7DowqIs92mJ37nelexmQsT3n6x20U59r53A6gXbrnJwnLU6m3UZgz3vX2b3BbSb/P9+kSERGFJO3dy0RERJUFG10iIqKQhHrL0ICMwezLTpMvC95K+P6ySKzP9ElFfQKs03TiNlqxxKpPnukSERGFhI0uERFRSNjoEhERhYSNLhERUUjY6BIREYWEjS4REVFI2OgSERGFhI0uERFRSNjoEhERhYSNLhERUUjY6BIREYWEjS4REVFI2OgSERGFhI0uERFRSNjoEhERhYSNLhERUUhCfYl9WZHffy8vvvzZN520pzp2SNnvbjptP2e63vTV/jzN/SNlv0sls/6s/Z3pifc95cXdnrjUi1vfP8nJp3l5qZ2xCq5Km1Ze3OSN9V787dRuTr4uT/pp+TPnpn7GrMzGjZ3pNUf5+4r6b0zzYs3NDW2eqPzhmS4REVFI2OgSERGFpFJ2L/81MMuLG2RuDu13lx+zw5neOdQ/5mlwbGizQVFUabGbF9956/Mx88267EkvPurRg5w03bQp+TNWgVVp1tSZvmPcGC/uXLXAiw9d08zJlz/z99TOWECwS3nI+GlO2n7V3/Xiy379p5/w88yUz1d5ltmooTM996HWXtyvo1+3Sw/Z6eSrKN32PNMlIiIKCRtdIiKikLDRJSIiCkmlGdOVqtW8+NBDp6dlHmr/XN2ZPvX8b714bL2WTlr++g2hzBMZKwe28eIjau6MmW+vKad5cePN81I6TxVRlZYtvLjuG1udtD2qZXpx568u9uKOZ7tjqWGafVeOF5+a/ZmTttfD13vxbj9PCGuWyqWVlx/gxbdd+aKTdkzNL6J+54RGg5zpvKV/J3/G0oBnukRERCFho0tERBSSStO9vOlE/ylUj7Z4zIu7vne5k68jJqZsHnLrqzM9rP4cLx5Xu6ubmd3LKZVRs6YzPXDY+Li+l/V6fX9CNXZGimpdX/+pU+/lPBEzX9fhK704zOd86f49nek/jn3Giw/5dbCT1mqUv/3mp3a2yqXMTu29+Pl/PezFvaq5zU4Bolv2VG1nuvk//VvH8pYtT3wG04RnukRERCFho0tERBQSNrpEREQhqbBjutq3lzP9xP2PePHLG/3bQ7oMd2/7SOXYzP5H/JbC0qkkcg9wx9DvajIyZt6tBf7jO+u8+lPK5qkiCr45CABWHb89Zt69/3uFFzdbHN4tOMFx3OGv/C9mvs0fu4+jrLVmfsrmqSKYfYN//UPwdrB4Tez9qjM970d/OzzppWuctHZ3/+zFBdtjr2NlAc90iYiIQsJGl4iIKCQVtnt53Y3u025aVvFvPLjmimO8uOq6qSmdjyrN/S6pF1q7T7TZqTzmSZcFJ8Xf3XXK7ycEpirGU3HCsviRbGf69z6jvXj4SncIqMUL/tt5wrwFZ2m/Wl7cN8u9gaXHhLO9uPVjfOpUUTK7dXKmvzrs4cBUDS+6f407tDNlvf+WoTfau/vIoE6Bpwo+N+QpJ+3+Ucd7ccGCv+Ka33ThXp+IiCgkbHSJiIhCUqG6l9dcuL8Xv7X7f5y0Fzfs4cVVv0ptl3LQrDv8qzd3qttpdvbCw704f+Wq0OaJgGP2+SVm2oaCbc70zhH+y9Yz2L1cIqriTAe3gYlrcpy0zG0rkSoZtd2nG829u5sXv3fcg15cgKpOvtaDf03ZPFU0q/u4L6fPqeI/9e2ixQd78ZL9Njv5Mmr5Q4G9L/avYL/2wjedfENq++vHwe67Y/DhmEVePOuYsv3kKp7pEhERhYSNLhERUUjY6BIREYWkQo3pZpyw2ot3q5LlpI189UgvbonUXvqf2b2zF798mP+Wklx1X46+6EH/Evtaual7uxEZuUfv48WPt3guZr4lEa+1yfj25+gZKSGfdHnPmT5/XH8vXrSpuRfvGOk+CSpeyw/y3wJ19L7TnbQPdnsyMOWP4/adfrqTrz5+L9VvV0b57i4XBfD//jOe2d2LG+BHN9+WLV7c/P/8ffObg/Zx8p1R+yN/Qt1bu1bk+mP2uj03/plOA57pEhERhYSNLhERUUjKdfdyZuPGzvTwTh/HzNvynvCeJjPn0npevHeWf4vEE+u6OflqjWGXcphW7FO1+EwABn10lTPdEayn0mryWA1neuyz/r0e/Wu4D6Yf2XqsF2fAv9Wo4EFFaThlIHYZr23ybwlreFN8L1inXdU+eVnMtA0D/S7kBi/EV96tbT6I+CT2OeL3P3fx4k7rJsX3A2nCM10iIqKQsNElIiIKSbnuXpaa7mNJBtbc4MV9Jp/lpDXD7FDmCQAa5ayN+vkrC/Z282Fe1HyUGtX2XBczbfYO/6k4XR5d7aSF+fD9iqbKN+7T3x458FAvvvOAHCdtyRF+F/Afg5724km57lOtzvzi4rh+u+OL/lWsH781Kma+B2YN9OIWv8yMmY+KtmlMc/eD7n54Tjd/iOa7ffo42Vbt6b8UQ4/19509qrrdxLN3+nd/dA+8/AAA3j3qMS/+934X+gk/zSh+xkPGM10iIqKQsNElIiIKCRtdIiKikJTrMd2Cteud6TtX7eXF/2g/xUn7rnl7L072myeqtGnlTP/Q6/XAlH9cs+2nRhHf5Jhuqm0/1h8/mrJP8MXX7kvs5+5s4sX58/5M9WxVWnnLV3hxzXdWOGmd3vHjoy/eC7F0Qny3hGTs4d9GErx9CADuWt3Di9tc6V8LEvEwMiqBZh8scKbn3bjDi69rOMuL//2ee31NrNu5TvvzGGd62zD/FtETXxvnpJ1bZ7EX/znM3+e2/6mYmU4DnukSERGFhI0uERFRSMp39/KmTc70F0v97qTve73qpC37qK6f9sz+KKn13dwukOwcv0tqv90WuvMV4zk2UroH61ACtjXyu5GrSmbMfNdPPcmL26Ls3WZAJbfoNr++I7swv7jbf6l69uIy2AdZDkUO2110nf9ktxf++6AXd6pay/1i4OUFHb7wb/fpcvkcJ1vBFr+L+r5vBjlp55/gDx3dv7c/TvF8T7eLuuCX8G4djYVnukRERCFho0tERBQSNrpEREQhKddjupHq3+4/FvKQEWc4ae/2GO3F99/mvkQ5HlNy3fHA/MDxyt7VdkTkFkTT+rFfnWm+wST1ck9YH/Xz4GMfAaDl8/G9gYjKrtUXuddqzNjvCS9emLfNSauxKnKbpWTLfst/9OO5uMaL157qbnvbN2R5cdfr/Nv18gMvt4/U+YZZzvRhHf1rMr7sPsaLb7vNPa9scRLSjme6REREIWGjS0REFJIK1b2MSX73bd2j3aSh/YZ58fqOWSiphs/F7pJe+k53Z3rqvqOj5ou8xYmSL7NTe2d6yj4vB1O96NPNPZx8Vb9y34ZD5c/WAZtjpp0y/QJnusnYaameHQoIdjVnvxU7X7xv9Ircl258N7A9B3bH9+8xxsn3ZPN+XpzsJxPGi2e6REREIWGjS0REFJKK1b1chMxxfndSw3HJLXvbwtruB/tGz6d9eznT8sP05M4IYUX/Js50rKdQPT52gDPdEROj5qPy45neLznTy/L9q2QbPlwz7NmhEDV+xn8Jxr5H/cOLJ/Z2n0x45bU5Xtz+X+xeJiIiqtDY6BIREYWEjS4REVFIKs2YbkpFPIAqI8axDMdwU297g+hPAwOAqbn+U4i63r/ESePLy8unJTce4MV9s9zbgH7K9cdxM3mLUMVW4N9s1PD//Hpf/ZL7JLLZp/tPKRv06llOmk6dmaKZc/FMl4iIKCRsdImIiELC7uVkiHg5fayX2FPqNTl0acy0Dzbu6cX5q1aHMTuUYkPO+NqLI19Uf/6Uc7y4DdyXjWQ2bOBPNGnohfmzf0/uDFLoMr792Yv7/e86J23WeX738qa73a7nOoP9Wz9T+fRAnukSERGFhI0uERFRSNjoEhERhYRjuklQUD32GO6q/NwQ56Rykiz/rVHH7/ZLzHxrdmR7seayXiq6gnz/nGLl5Qc4acdc8L0Xvze/uReXhZecU/J0eHaxM/3S4GZe/N3ubztpR/Y8z4szxqfu9k6e6RIREYWEjS4REVFI2L2cBC8f+bQzPXuH3918xujrvbg1JoQ2T5VKvv80mmdnH+gkXXXAQi8et7iDF7dAOE+fofSZffALXlxwsHs7Uffv/K7EDiO2eHG8L1Gn8iFvsfvkuTdPPMSLh371hpO2+rrtXtxkfOrmiWe6REREIWGjS0REFBJ2LyfBHQuOc6a3PNnCi1uPYZdyqmme/7qCnBu2OGld7x3qxTK9Nqhi+fxmv7tw1o3NnbQfJ3bx4i6P/O2ktV8+14vzt28HVQ7BJ46dNv8IJ+3DPZ/34vP3u9RP+GlGUueBZ7pEREQhYaNLREQUEja6REREIeGYbjIc5l6WXgtLYmSkVMv/Y4Ez3XpwmmaEQlH9w0levOpDN60DfvLiPBC5tp7o3kY2ccJuXryucy0vrv8TkopnukRERCFho0tERBQSdi8TEVGlk796jTP9bKd2XlwfP6bsd3mmS0REFBI2ukRERCFho0tERBQSNrpEREQhYaNLREQUEja6REREIRFVLT4XERERJYxnukRERCFho0tERBQSNrpEREQhKfeNroiMFpEdIrIwzvxZIrJZRHaKyF0x8uSIiNp8FyV1hpNMRDrZ+cwXkQvSPT+JEpERtm42i0it4r8BiMifdh14uYg8KiJbROTu5M1t8sWzfpZ1pdgmi12HRaSfiBTYfEcmdYZDVEHqt1Jvo0B8yxNLmWh0RWSciGy3lbhZROaWsIgHVDUnoszDRWSarcQlInIqAKhqrqpmA3gljnLrqeqzUeb3VruCHB747AERWSwiG0XkLxG5qaiCReQKEVlg808RkQMDaf8QkWUislBE+gc+by8iE0Qks/AzVZ1nl+f7OJYnFCLSVUS+EZENIvKHiJxYwiLeUNVsVd1iy6snIv8TkZX234hgZlVtD+CeOMrtqao3B+ZzkIj8Zte5CSLSLZDWQ0Q+F5HVIlLk1Ya20XhfRFaJyFr7vc6B9MNsXS8XkdMDn9ez62jtwLKUZP1MGRFpICLv2u3nLxH5RwmLcLZJ29iMsuv7chG5pjCtBOvw33a9+MyW2VxEPhCRv+32mBPMXNRv2vTDRGSOiGwVkbEi0ibWD4s5EB9r886J2PbLXf0CgIicLiKzbR3/KSIHleDrzjZqy9tLRL6z29MKEbmyMC1F26iIyF0istTua8aJSPdilvlKW1db7LJ3sp/3FJGZdnu/JpC/qohMFJFWwXJKsDy7KBONrnW5rcRsVe1cfPbYbMW8CuBmAHUB9AQwNQnzCBFpD2AwgGURSSMBdFHVOgAOADBERE6KUca+AO4DcIqdv5EA3hWRTBGpYtP2AnA5gMcCX30UwNWqmp+MZUkFO//vA/gIQAMAFwF4uXDlLqWHANQEkAOgD4ChInJugvPZEWbHdzGAegA+BPCBnX8A2AngTQDnx1FcPQAfAOgMoCmASTB/g0IPAxgEYCCAJwMHTfcCuE9VNyWyLCnyBIAdMMszBMBTxe3QijECQEcAbQD0B3C9JH7GWgDgMwAnl/Q3RaQRgHcA3AKznk4B8EYRv/UagJ8BNITZr7wtIo1tWrmrXxEZAOB+AOcCqA3gYADzEyivEUxdPAPzN+oA4IsE57G4bXQwgPMAHARThz8CeKmI8i6A2Z6PAZAN4FgAq23yvQCuhWkrbhaRZvbzawCMUdXFiSxLUFlqdJNpOIBnVPVTVc1T1TWq+meSyn4CwL9hdkgeVZ0bPOqD2SF0iFFGDoCZqjpVzT1bLwJoBKAJzAq7VFWXAfgKQDsAEJFT7OcTk7QcqdIFwG4AHlLVfFX9BsAPAIYmUOYgmDOnraq6EOYg5bwE53MggO9Vdbyq5sHsgFoAOATw6nMkgJnFFaSqk1R1pKquVdWdMAcJnUWkoc1SS1V/U9VfYNabhiLSB0BbVX0zweVIOjFdhicDuEVVN6vqeJiDikTq8GwAd6rqOlWdDeA5AOckMp+qukJVnwQwuRS/eRLMNviWqm6HaaB7ikiXyELsAeNeAG5T1W2qOgbAr/Ab+3JVv9btAO5Q1Z9UtUBVl6rq0gTKuwbA56r6ij2b32T/5okochsF0BbAeFWdb09EXgbQLVpBIpIB4DaYk5ZZavypqmsDZX1j/wa/A2htez5Ohtmek6YsNbr32lP7H0SkX+GHItJaRNaLSOsSlLWf/e6vYrppXxaRBonOoIgMBpCrqp/ESL9BRDYDWAKgFszZdjSfAsgUkX3tUfF5AKYDWA5gFcxG2xLAAAAzbffUcAA3JroMaSIAengTpj4PLCJ/rDKilpfgfAXjZJV7MIDlqlr47rCVtvuqJ8zB2DoAjwAYloTfSoVOAPJUdV7gs18AdAdKvk2KSH0AzW0Zu5SXCnH8Zvdgmj1g/jPGPHUHMD/ijDVYVrmqX7vP2RtAYzHDP0tE5HERqRHIU9JtdD8Aa20X8EoR+bCE++yYsxsRB7fR1wG0FzO8UxXmIOuzGOW0tP96iBkGXCAit9vGGAB+A3CE3e/mwKwLjwC4zh5IJ01ZaXT/DXNG1wLAswA+tN24UNVFqlpPVReVoLyWMEflJ8N0L9WA201bYrbhuwfAlbHyqOp9MF01e8F0c2yIkXUTgDEAxgPIhTkCu8gefRUAuATA2zDdHRfCHJU+BmAPMeNKn4tIMhqHVJgLYCWA6+x4yBEwR6Y1CzPY+hxfgjI/A3CDiNQWkQ4wByk1i/lOcb4CcIiYC3SqAbgJQLVEy7Ub7RMwR/6FLobZgJ+FWS8vsb9f3dblWBE5ZJfC0icbwMaIzzbArNul2SazA2XsUl6KFPeb2dh1+4w1T8XlLW/12xRAVZjhrYMA9AKwJ8yBPYBSbaMtYRq9KwG0BrAApks+EcVto8tg9qFzAWyD6W6+uoj5A4AjAOwOM9xwBvzho2th6u0DW0ZfmP30AjHXa3xrT7oSViYaXVWdaLsjclX1fzDdkUcnUOQ2AC/YCzQ2wzSWMcuzA+iFF3HFuphgBICXbPdmTLbh/NnOw+0xsp0PM5bSHWYlOhPARyKymy3ja1XdT1UPAaAwR6WjYbqhzwFwJ4Dni5qPdLFHhSfAjJssB/AvmLHRJQkUOwzm7/k7zFjpa0WVJyKfBupzSIz5nAOzk3gcZuNtBGBWIvNpx/i+APCkqno7HFWdrqr9VHVf+xvnwayTz8OsI+cCeElEJEqx6bAZQJ2Iz+rA7IRKW15hGXGVF6i/zaU8YyruN0uyjEXmLYf1u83+/5iqLlPV1QAeROL73HdVdbLtrr8dwAEiUjda5iRto7cC2AdAKwDV7W9+IyLRDpwLl/kBVV1v9+PPwC6zqv6lqker6l4w+5g7YRri/8KM9R8H4MFk9JiWiUY3CoXbrVBSM2wZwfJi/5hq98BFXLGuoDwMwDAxVyguh6noN0Xk3zHyVwHQPkZaLwAf2YOCAjVXYy6DuQDLYzfSx2EanUYAMlX1L5gxrD2KWqZ0UtUZqnqIqjZU1YEwvRiTEihvraoOUdVmqtodZr2NWZ6qHhWoz5hXiarq26raQ1UbwvQ25CD2+GCRbHfmFwA+UNWibnl4CMBwVd0Gc8Q9xe4AqgJoXMT3wjQPQBV7IUuhnohjfDsaVV0Hs373jLe8QP1ll7CXK97fnBlMs+PY7WPM00wA7SRwFXIR81/m69f+bZagBPvIOJR0n5uMbbQXzFXUS9RcuzMaQH1EH9edCzPeHs883grgOVVdAb8ON8D8zWJdpxO3tDe6Yi6rHygi1UWkij3qORix++bj8QKAc0WknT3quQHmatpEHAYzltDL/vsbwD8BPCEiGSLyTxGpL0YfAJcB+DpGWZMBHGPnT8RcSdgJZlwh6AIA01R1OoA1AGqIuTK7PxK40jDVRGQPW581ReRamLG10QmU115EGoq5uvsomCuiE77HUUR62zIbw3QNfmCPrgtvR6gO0xMBuzxZMcqpA+BzAD+o6g1F/N4AANVVtXBdXADgUDFXBWfB1HHa2fHNdwDcISK1RKQvgONRxJWhcXgRwHC7jXSBGTYZnei82joqrJcsOx3Pb74LM753sv3OrQBmFNZ/kB3bng7gNrsenAhz0DsmYl7KRf1aLwC4QkSa2APGq5HYPvIFACeKSC87vnoLzEVOsYbY4lLUNgqzHx0sIk3tPngozMHNH5HlqOpWmDPW6+0wVUuY/YizzHb/2g/AU/ajwjpsCjNUWeIDwF2oalr/wRz9TYbpqlkP4CcAAwLprWG6d1rH+P5oAHdF+fx2mIuSVsHsLOrH8z2blgNzFFSliPleCOBwG2fAHCSstfM6D2b8QQL5NwM4yMYC4A5bgZsAzAYwNKL8RjCNcJ3AZ0NgumwXAugfkX8cgAvSXZ92Xv4DczHJZpiLxjpEpHt/iyjfHQHg5YjPToU5yNkKs/MbGM/3ItI1ynyMt3//tTBdTbWirAPBfwsD6Z8CuMnGZ9v0LXbZCv+1DuTPsvPeJvDZYbYulwE4Pd71M6Q6bADgPbtMiwD8I5BW4m3SLv8omLHiFQCuifK9mOswzI5wSYx6df7F+5sADgcwB6brcRyAnEDa0wCejlgfxtm8c2G3/XJcv1UBPAmzz10Oczti9UB6ibZR+/klAJbCbPsfAmgVz/ci6rIk22h1mOsnltk6ngbgyCLqsA7MxVebACyGOdCSiN8bC2DfwHRPmC7t1VHWnyKXJ+ZypqvSk7jyPGdXkD/jzJ9lV7QtMLcARMvTBsB2m+/CdC9jMcvT0c7nVgDnpHt+krA8w23drA9uYMV8Z65dB0YVkWc7zMUvd6Z7GYtZlmLXz7L+rxTbZLHrMEzv1zabb5eDrvLyr4LUb6XeRuNdnlj/+Go/IiKikKR9TJeIiKiyYKNLREQUEja6REREIalSfJbkGZAxmAPIafJlwVtJvzGf9Zk+qahPgHWaTtxGK5ZY9ckzXSIiopCw0SUiIgoJG10iIqKQsNElIiIKCRtdIiKikLDRJSIiCgkbXSIiopCw0SUiIgpJqA/HICKiyiejZk0v7j1hk5N2W+PpXnzErJO8uNqAv1I/Y2nAM10iIqKQsNElIiIKCRtdIiKikHBMNwWqNGvqxTs67hbXd6rOW+pMz72xnRfXm+U/N7vB7O1Ovozvfy7NLBKVG9sH9XGma3w6zYt1725evOC4Wk6+gw791Yu//2b3mOU3/zHfi6t/OKnU80mu4DjuvGc7e/F7jZ918hUE4sW/NPfi9uCYLhERESWAjS4REVFI2L1cShvO3M+L1xztdvnesOdnXnxWnU/iKm/khtbO9Em13/Xi+oOrx/zesS16x1U+UVmX2aihF+e/UcOLX+/4oJNvRX5VL66bMc6LW1epiZjO/i5m0sozt3rx349Wc9L+ec+VXtzwuR9jl0+7mH9zTy+e1f9RLx4y/ygn35q723px+89+Sv2MpRnPdImIiELCRpeIiCgk7F6OkNGzqxfPucK/GvL7Ix528jXOnOx/JwnHLufXXRTxSewuZaKKaN4j/hDL3C4jAylut3GTTD9+cn0nL562yR2iWbKlXszfyhT/mtmPO38YtWwAeGP4f7z44tmXO2kZ46eDYtvRJC/q5zO+7+hMt/2scnXb80yXiIgoJGx0iYiIQsJGl4iIKCQc042wpW1tL5531FOBlBq7Zk7Q0+v9p0698tc+pSqjLv5I1uxUeBm9/KcXbW/mPr1o4Qn+U79O6TPZSdup/kDf2Jf8pyM1/3aDk09/npmU+awsdP+ezvQbBzwTmPJ3TZ9tc8d077vubC+uPXO1n7BqrZMvY93i2L+d4ddpp/+71ItnnfqYk6991Wwv3jZ8o5NW9xz/yXN5y1fE/K3Kqmr2Di/eVODHrb/MTcfslBk80yUiIgoJG10iIqKQVNju5SotWzjTs//d0oubTvC7Euu85j4BJSNXvXjeTr9LZHGee/tBqyrrvfic38520tbN9p+s03SyX84+eNYAACAASURBVF69CW53l27e7MV117ObOBm0by9nev5lfvzq/s95ce9qEfeGxOs6/4H4267d4SQ9u97vvn7yl0OctI7nz/bigu3uE8wqq5113ac/9arm744K4G83171wnpOv1bsTvDgfpVTgf7PD1f4+oGs197agGcc/4sXf7v62k9b3cL9buu7L7F7O7NDWmZ558CgvvvLvw/x8Y6ehMuOZLhERUUjY6BIREYWEjS4REVFIKtSYbma9ul7c5+MFTtp7jT7w4r5T3HGboKxP/dtFrjvmHC/OnznX/a2u/qPMGsz900lrUDAvatnRH4pGpVFwoD92u9AfWsPHfZ9w8rWvErzVyx/H/XKbewvYTbNO8OL1i9zx+99O8G8juWWF/3apB5pNcfL1rOG/dPvBPm84aTdefY4Xt7x3AgjIry4x0/aYcI4Xt747vL9Xx8smOtMfHe6/VH1w9honbf1xW7y47supna/yYO6I2I/dDFPuUf7tl5taxW7iGk91bwHTqeHc8sczXSIiopCw0SUiIgpJue5ezqjuvokn922/e/mmRt84aZ3f8fsgu7zrdyMUdctBZJeykzb79zjnkpJh/qvurUCvxLz9x+02PmPBAC+ePMe/paHLlbOdfI23+HXdOOK3L+59uBevHNbGi69+yr3taHjTcV78/bbmTtr0y/0u6hNePt6L8xYvQWXV+cbY3XmZU2vHTAvTzZP9YYfB/Uc6aZd1/86LP0L90OaprHpo3zdipv3w6l5e3AyJDxf8+cqezvQj+77mxbtXG+/FTTOzYpbxx053wO/4t6/24vbX/hSZPWl4pktERBQSNrpEREQhKXfdy5n1/W6cOXd2ctLmdn3Si6dGPFO7yx3zvTh/o3vVGpUNGbXclxD8fsfuXjz7EPeq5IzAlciTA08RG/L+ZU6+zrf73cid1vtXGxcgfrvXXurFX1bxu6in/Ke3k6/hg/6VryfUWg9X7Ct1K5OMPbp4cb96Xzpp83b6T+pqNGNnaPNUlPrfBoaw+qdvPsqqzDp1vLhWhrvT/WKbvz03eyi+LmWp6j+lbEf/PZy0m596wYsPrj7VSasq/v5gUq7fpXzWnMFOvmvafuHFx9Xa6qQ9eYI/fPDwqBO9OH9W9LtRSotnukRERCFho0tERBQSNrpEREQhKXdjun+f2dWL557ovnD6gy3+eO/IYwc4afmr3KdGUdmz/rjdnelvBv/XizPgvsj8623+uM19l/pveerwhXupf7xvoZEq/qaQ0bm9k/b8ew28+D8v/s+Ld6+2MqIUfx4zxT2e3X3iP7y4xcrKuy7+frb/1KLTs1c5aQfOGOrFdT6ZDCr7FlzVw4sPrP61k9Zt7Fle3AE/xywj+HaiuZc19eJZpz4WLTsA4Ott2c70pZ+f48VdHlntxVnz3G3tCfjXAT32dSsn7aMu73jxva3920+rzYo5G6XCM10iIqKQsNElIiIKSbnrXt6077aYaY8s8F+UXGNe5e3CK6804r3y2zX2bTabCvwnTy3f17/NYNtJfZx8HToui/r9Ddvdp5kNbuO/WPuyei85aVN2+OX3zQrebOR2eQf9sN29KanFXf6yaG5uZPZK4+qjPvbi4C1CAFDtiYaBKW6/5YHsEfv2y6p/1oiZFhR8UcKc/v6tgZG39Q2Zf5QXb7y+hZPW8Uf/dr14h5T+mN/M/aBL9HzJxjNdIiKikLDRJSIiCkm5615+re+zgSn3mOHtbv5LLfd/8F9OWtsPdnhx5rhpoLKn/vvuA/AvOmuIF7/cxX1h6XG1/KdQnXyJ/ySyfI39rKlc9R9wniVFrfpumtul7MuL6MjqN+N0L25wmZum88N5V2d58syag53p6h9NStOcUGl1abKixN+R3t2d6XcPfCowVdWLuo+7yMnX8Xz/6XKy/ZcS/25xbl3pv4e3+rhfvbgkT6+LB890iYiIQsJGl4iIKCRsdImIiEJS7sZ0+2T5ff471R03q5/h3wYy5zT3rTQ7T/Xz9vj6Yi+uO9m9dWRzS3+ssI7/YiI0mrEl5jyt3sN9O07Tcf6TivJ561LcCjZtcqazjvCnL2p6kpM2e0SOFx/R2x9/mbehiZPvr6WNvDizmr8OHNd5hpPvgWZTUFLdxrpjTp3/5b+NKG9F5NOqKqfMenWd6doZS9I0J5QKLWv6b9PKiDyHE0U084a5L5bvWtXfp/eefKYXtx/iPsUq2WOrVbN3ONNb8vz5Kti+PTJ70vBMl4iIKCRsdImIiEJS7rqX2354oRfPO/bpuL8XfMnx3MOf8xMOT8psOSbd4D996KpZgdtIjk3uy5Ark/yI7tpOl/jTCwOfV8NfTr6OEdOFvni3mzNdVPfywjz/ZdcnPHa9X/bD7i0u+Xl5INeS893bQ4bUHuvF07bkhDw3JZd79IaYaVsLqsVMqywK1D9vK4jsAI7xRLnmTdc708HvdWvs34K0LgnzFyn4coWZB49y0g6ecaoX10nhE9F4pktERBQSNrpEREQhYaNLREQUknI3ptv5Mv8y8oFvubdsnPX4h15cM8N9k8uxNf0XZgfHd1OhT5Z/qfz4PV/x4u7/Gebka3/djymdD3ItuGd/L562z0MRqbHH5055wB/H3e2JCV4c/YYIKs/yDu3tTL++5+OBKfdWl3fv999qVhc/pXK2KpR657u340z83r9l6PHW/j58//uvdfJ1etS/PiNv6d+l+u2ub/hlrMh331hX/ZEGgSmO6RIREZV7bHSJiIhCUu66lzVwW0bVr6Y6aa912S3m9x49xb91J7+qfyn7Ade6t33c12xyorPoCD6lpWXP6C9Up9T5+7oDvPjzIQ94cQ2J/QL6R9Z1cKabvTDdi5P9VBxKv2CX8tor3SfPdanqdylfurSvk1bvDf9tZZVlqCF4yw0AHFz3mxKXEdk1fP/hJ3hxzzH+YwB/O/NRJ9+lh/T34mXHNHDS8tes9eL1Q/1hpAOvmujku7XpD17c+3W3+7r9Z+EMEfBMl4iIKCRsdImIiEJS7rqXS6vW2xOjfv5hz/2d6fuG+t3LW9V/IHbv7y5x8rV53r8CevWwrU7alH3cF65TeHYesbcz/d7lfpdy6yqxu5QXBZ469cG/D3PSsrYmd8ihMqmz0H0pSfDpXukkVfxd3/qr/RdrTNnrdSffl9tqePG8W9yna1XbWfKXZJR3+X8scKZfX97Hi09s/5mT1ubARV6cWaeOX8bGjU6+vPkLvXjqnv554MFD3bs9Gszwn2QljXY6aQseb+XFMw/2rziPvEI52KXc/tr0XHHOM10iIqKQsNElIiIKCRtdIiKikFSaMd1YWn/uPrkKQ/2wpvhPKZp9yEg3W5sBXvxJzucRpUY/llm03L3MvaPzfhxKhoXHuk8by4kxjrss3x1bPOuqf3lxzY+jj/9TydUa4/4tP7uzqxe3r77KSfu9ZQ8vzluyNOHfLjiwlxcvuNRNO7mrfxvYPU3ccdyge64924trfD4pZr7KavsF/ljtg2O6OGkfdXnfi6/82r/datLT7nU02X9HfzvXqn3cG/T2GebfTvR/u4130oK3Zj67IceLR//3WCdf+1Hpfwogz3SJiIhCwkaXiIgoJJW+e7nqlN+d6f2mneHFP+31WszvvZTzZWDKPXbJVf9y9mMDL7HvMsx9iLZ7MwWVVmZDv9v+55MejkjNQjT9xl/uTLd/l13KYbu0nnv7yYqP/K7KKWtbJ1z+fW2f9eJe1WLv6qbu8LfEoZPOd9LafzPHi7m97ip/nr9P++5495aq+h/7T/d6aLfv/YQ7vkcswW7ighI8/63H+HO9uMM1q724wdL0dydH4pkuERFRSNjoEhERhYSNLhERUUgq/ZhuwaZNznSzK+p78aBRx3nxTTkfO/n2z/JHeMZsbuSk3fzJaV7c4Wr/UWMcE0qezPp+PV010R8jypboY7gAcP8a/3aVjhe6Y/l8e1A4grdwrLzyOyft9sa/+BPBuNT83VtexNb3i/+EV5z5hv+4wbY3uGOA3GbjF3ycIwC818+/BezRc/03CW1p6z7C8fMj/eswBn5+lZ9QxKubOj+/3ZnOmTzDn494ZjaNeKZLREQUEja6REREIan03cuR8hb6b8bAoX44bJj7SJtN+/hvr+gyfLWT1uGv9Ly9ojJZfZz/9Jsjao714vwiuqQ+ub2fF9fawluE0qFB4IlAk7/r5KQ9+J7fZXhNfbf7vzS6fHueF1f71X0yWct7J3hxW5S920oqgvwVK724xX0rY+a7Av7Tqjohvjd6FbGZl3k80yUiIgoJG10iIqKQsHs5Tk0fneBOB+KyfrVcRXTytV95cb7Gvva4w4cXe3GnMexSLksiX4j+VY/afoy9Ei6/HaYXn4koZDzTJSIiCgkbXSIiopCw0SUiIgoJx3SpXOpZw7+1K1P8Y8eftrvPEOr2gH+rAsfeiSjdeKZLREQUEja6REREIWH3MpVLV73iv2x8zoVPevF5o65w8rWa797qRUSUTjzTJSIiCgkbXSIiopCw0SUiIgoJx3SpXGpzmz9WO/C2Xl7cChzDJaKyi2e6REREIWGjS/T/7d13uBTV3Qfw748LXKo0FaR3AaWLjdAUY3mFSJRExR4k5LXFQowVRIwm5rWAXUFssaDSfCIaBaIGEKkiikaagCgI0hG43N/7xzn3zJx1d+/eu7tzC9/P8/Dwmz1nz87cmTNn5pwpREQREdWy/DpgIiKisoNnukRERBFho0tERBQRNrpEREQRYaNLREQUkTLf6IrIKBE5ICK7RKR6it9ZKSL7ReTFJHlURHaLyD2Zm9vME5Fcu+wHRGRMSc9PukRkol03a1LM39Yu/0ERGZogT18Rybf5zsjoDGeYiPS385kvIv1Len4ygXWUdbSc1dFClyeZUtHoikh7EZkpIttF5GsRGVTEIl5V1RqqutuWV1tEnhORTfbfqHBmVW0F4C8plNtZVW8LzecAEfnM/sHniEiHUJqIyBgR2WCXY7aIHJNkmZuLyCwR2SMiK8I7WBE5VURWi8h3InJ+6PPaIrJIRGqGlmWfqtYA8FIKyxMJEakrIpPtDnGtiFxYxCL+pqrNQ+XlisgEEdlh/yY3FKSp6ld2+T8spMxv7TYyw5YpInKbiHxjy31FRA4L/WYjEZkqIltFZL2IDE+yvLfabaLg3167Azncpo8QkR9EZLmIdAx9r6eITAmXparv2eX5BqWIiFwtIgtEZJ+ITCxGEbF1tJ/d/rfH23lnqY7misiDIvKtiPwoIo+JSKVEBRdSVlmvo7NF5KfQNvtlEYuIraMFDXG4HuQAWa2jdUXkVRHZYuvXS+H0OMtcza7zH+x290Eo7UIR2Sgia0SkX+jzVnbd5xR8VoTliavEG10RqQhgKoC3ANQFMAzAiyLSNo1iHwRQDUBzAMcDuFhELk9zPtvAVJrhAGoDmA5gmp1/ABgM4AoAvWCWYy6AF5IU+TKAxQDqAbgNwOsicoRNewjAAACnA3gstMLvBXCfqu5MZ1ki8CiA/QDqAxgC4PFkByApGAWgDYBmAPoB+JOkfzR8CYCLAfQE0BBAVQDjQukvAlgNswz/A+Av4coYpqp/sTuLGrYy/hXAbFX9QUSOAvA7AC0BPA6zDgu2+/8D8Mc0lyMq3wIYA2BChsrbbcsakaHyUqmjfwZwHIBjAbQF0A3A7cUsq6zXUQC4OrTdHp2B8v4WrgeqejDN8gqro2MA1AHQAkArmLo6Kkl5T8Hsm9vb/68HXF28D2Z7uDrmN8YCuD4Dy+KUeKMLoB3MH/RBVT2oqjMB/Afmj11cA2A2gD2qugbAeJgGMR2nA/hQVT9S1TyYHWsjAH1segsAH6nqKruCXgTQIV5B9oCiG4CRqrpXVd8AsAzAuTZLdVX9TFWXwjRe9UTkeAAtVPW1NJcjq8R0H54L4A5V3aWqHwGYhvTW56UA7lbVH1X1CwBPA7gszVkdAGC8qq5T1V0w6/O39mi4BoC+AO5R1QN2PbyOFLYhERGYncVz9qOmABar6g4A78E0voBpbKfZ7bPUU9U3VXUKgC0ZKm++qr4AYFUmyrMKq6MDAIxV1a2quhlmh5ponRZWVpmto2VIwjpq01sAmKKqO1R1O4DJAOIe3ItIOwADAQxT1c22rVlok+sB2KCqGxGqoyJynv3840wuVGlodOMRmKNRMyGyTUR+UYwy4paX5nyF43C5rwBoJaa/vxJMQzEjQTnHAFgVczS8FMEGs0lEOotIZwD5AH4E8DCAazOwDNnWFkCeqn4V+swtm4g0teuzaSqFiUgdAEfZMn5WXppi12cuzBm1JEhPZRvqBeBIAG/Y6a8BdBSR2gD6A1guIk0AnA/g78Wf9dKlmHU0G5LV0XjpjUWkVjHKKst1tMC9tqv1PyLSt+DDotbRkP8VMxyzUETOLTx7ShLVUcD0qJ0tInXsfuJcAG8nKOd4AGsB3GWXeVloHjfDHDQ1BnAaTB2tCdMLckuGlsMpDY3ulwA2ARghIpVE5JcwR5MFRzNQ1dr2jClVMwD8WURqikhrmKPZaoV8pzDvAegjZsC/MoBbAVQOlbsRwEd2efbCdDdfn6CsGgC2x3y2HUDBONBwmAr8FMwZ4h/s71cRkXfEjIX1QelUA8COmM/csqnqN3Z9pjpmWSNUxs/KS8MMAEPFjK3XAnCz/byaPRj6D4A7RKSKiHSDqdCpbEOXAnjdHplDVbcAuAfATJhu6ptg1u3NAAaJyL/FjB03TnN5SlQx6mg2FFZHZwC4TkSOEJEGCBrIeOu1sLLKch0FzPbXEubs/SkA00WkFVCsOgqYXoM2MAecdwCYKCI905zHhHXU/r8IZp1ssf8OAngsQVmNYQ6YtsP0rF4N4DkRaa+q+TDr73WY+nklgLtgupk72XX5johk4sSt5BtdVT0A4ByYHdJ3AG4E8BqA9WkUey1Mw/dfmPHil5OVJyJvSzD4PyTBfK6A2aE+AtPAHg7g81C5dwLoAaAJgCowK21mqCskbBeA2AH/wwDstL+1RFX7quoJ9jeugLmo5Blb7uUAXrBdmaVN0mUrZnkFZaRUnvgXcyQ6Wp8As13MBrAcwCz7ecH6HALTfbUOZiz2RRSyTdp1PRhB1zIAQFVfVtVuqnomTMXfBzOe/3eYLrRJKEdnvdmQoTp6D8zffQmAOQCmADgA4PuillXG6yhU9WNV3Wkv8noO5iDzrDTKW6SqW1Q1T1X/CTMe/utE+TNUR18D8BXMAfhhAFbC1NN49sKs6zGqul9V/23L+6Wd//dV9URV7QNAYcb+JwJ4HmYo626YdZu2Em90AUBVP1XVPqpaT1VPhzkCm59GeVtVdYiqNlDVY2CWM2F5qnpmaPA/4RWGqvq6qh6rqvUAjIS5UOsTm9wF5grN9XbDmwgzyB9vXHc5gJYSusIRQGf7eawHAdyuqnsBdASwwI4DVgJwRJz8Je0rABXthSgFEi1boVT1R5idXudUy4u5mCPu0bqq5qvqSFVtrqqNbXkb7D+o6lpVPVtVj7A71sNR+DY5CMBWmJ3Ez4hIVZgd840wZwXr7FjvJwA6FVL2IS0TddReP3G1qjZS1ZYwZ0cL7ZlOkcqKUdbqaDwKvys3q+Vloo7C7HOfVNXdtmfpCSQ+cPg0wTx67EHSIzAnbocDyFHVtchgHS0Vja6IdLLdeNVE5CaYMbyJaZTXSkTqiUiOiJwJc0V02vfHiUh3W+YRMF0y0+wRMWBWymARqS8iFUTkYphK93VsOXa8cwmAkXa5B8Gs0DfC+UTkNABVVPUt+9FqAKeIuRI4Fxm6qCWT1NwS8iaA0SJS3XYx/QrJr+QuzPMAbrdjN+1gun8mpjOfYm43aCVGBwAPABhdsAMWcxtbTRGpLCIXwRwRP1BIsZcCeF414VtEbgcwUVW/hbkl6GgRqQ9zRXYmLyjKOBGpKCJVAOQAyLHbbbHfx23rSBWYOiK2vMoZmM+EdVTMbWAN7To/EaYbdGRxygrlKXN1VMxtTacXrEPbc9Abia9BSaXM80Skhl2vvwRwEcwFlOnMZ9I6CrPPHSoiVe0B7TDEb1wB4AOYOneLXeaeMPXunZh8QwEsUtUlMOuuqv3tzNVRVS3xfwDuh7kQYRfMQHjrmPRdAHol+O4oAC/GfPYbmFsc9sA0bqen8r2YdI0zHx/BdGtuBfAkzBWMBWlVYAb2N8KMaS4CcEYo/QkAT4Smm8OcEe2FGQfuH/NbuXbem4U+OxXAGvsb58fknwjTdVIa1mddmK673TAb+oWhtKZ2fTZN8N2fLYf9W0ywf9fvAdwQ53uzAQxNUGZfAOtjPmtr/+57YC6wuCEm/Y8wF1jstuv9uGTbJMzYWF7sNhNKbwezk8gJfTYCwA8w3ZMdY/Kvid0mSnidjrJ1IvxvVKK/R5zvxtbRvnHKm13Y92LSi1pHe9u/6x677ofEfPdtALemUlZouyxzdRTm7PsTu2zbAMwDcFoovTh19EOY8dIdMBc6nh/ne5muoy1gbuXaYtfRDABtQunLw+sY5uLLuTB1+nMAg2LKOxzAZwAOC302BGbYcw2AfqkuT9K/f0lvABnYgG63f8RtsZUiyXe+tBvVhCR5frIb0d0lvYyFLEuuXfbdMLcglfg8pbk8T9t1szLF/G3s8u8BcFmCPL1hDm62Ic4BWGn6Z3fa2+z89ivp+cnQMrGOso6Wpzpa6PIk+8f36RIREUWkVIzpEhERHQrY6BIREUWk2FcfFsdpFQazL7uE/Ct/UsbvF+T6LDnZWJ8A12lJYh0tXxKtT57pEhERRYSNLhERUUTY6BIREUWEjS4REVFE2OgSERFFhI0uERFRRNjoEhERRYSNLhERUUTY6BIREUWEjS4REVFE2OgSERFFhI0uERFRRNjoEhERRSTStwwREWXS1w+e6OKVv33CS7tkbW8Xf3/SjsjmiYom75TuLl49KGiSbjz1n16+YbXWuLgC/Bf45CN4mdLITV1dPH3NsV6+hvfmBBPzlxVrftPFM10iIqKIsNElIiKKCLuXqVyr2KC+i7f3bO7iDaf57/ZePfApFx/Qg15azyXnu3jzujou7nDfd16+vDXfpDWvVHQ9T/w8YdrzzT5wca9Bv/fSqk3+OGvzdKjacPPJ3vTuNvtdfEH3+Qm/d9eRQd3LR76LK8ScE4bT2s8e5qUdOS3XxTVfnefihki8fZQUnukSERFFhI0uERFRRNi9TGWe5AZdS6vu6ualPXLeMy7uU3VPwjIOaHD8Ge7GAoAPu/wjmOgSCutd4eVrOjil2aUMCnchJ/Ntb/9q19aTszE3h7al1z7iTYevKP7+4F4XP7bF74Zu+3bQ9V/9v5VdXOUHfwio3vi5Lm6FxenNbAnimS4REVFE2OgSERFFhI0uERFRRDimG+Ng32BMsOKd37t4+tHTvHyVJHiySbJbTOrdVsnFsmaDl2/LgA4urjvlMy8tf+fOosz2Ie2bEcETbZZd/HCxyrh87akuHt/sXyl9Z8nJE7zpgehRrN+m7Gt9/bzCM1Faei87z5ue2fFVF4fHcRd29c/12mJBdmeslOGZLhERUUTY6BIREUXkkOxeDt9isnNgFy9t5L1Bl2H4FhP/JhLgQOhq9mS3mHS74zIXd27gH+NMbR5cYt+j9jVeWv1xc+LPPAEA9KTOLp5wxbgif7/Ts9d60y3uXuTidg9e5aWt+NWjRS6f6FBT+8r93vRb79dz8Tm1F7p4SfsLvXwHv/hvdmeslOGZLhERUUTY6BIREUWEjS4REVFEDskx3X19O7p45kOPJMw3a28NF985xn/kX6U9Gpvd2dEsOJapHHry4J9u8m8x2Z6f5+IaG/3bjsgXHsMFAB2z1cXdgyH6n429T951pIsnXDbQxc0/9t96ovnB3//o65d6aWdO+YOL734ieCPKcbn+Ouv/WXCb13vH1oxdBMqCVq8Od3HsS+zDwi+7B3gLUTbkrVvvTf958hAXf35RsJ/d38CvGzlfZHe+Shue6RIREUWEjS4REVFEDpnu5XD35L2PP5kw3wUrz3LxjpFNXFxn1tx42eOq1bqFi7tMWuni9pX9Y5x2U693cdvX+VLtZDb1qO5Nf9Iu6KoPPx1se75/28LI14KngzWfm9o61H37vOlK7wZPzLnonaA7c/kAf2hiRN1gXT/98qVeWosL/C5ryoxkXcpUwkIvdqoQmthyTBUvW13pjlTkLghuLTq4Y0d681aCeKZLREQUETa6REREETlkupd/vC14iXL4atezVvzay5dz02FBvHgRimNb9/ouHnnkawnzNXm3WMUfkir03+JNh58CFn462OWrBnr5mt+R+rBAKtr+IbjqedwvjvHSbqi7wsVDOnzipc1BZRCVZxWbNPam7zvnJReHX2g/7xb/pSQVQud+4XpdIeacsO+ywS7eN8mve+EX3Jd2PNMlIiKKCBtdIiKiiLDRJSIiiki5HdNd/Uonb3p512ddvD4vGN+tcFsdL58u/rTIvxV+axEAtP7j50H5oeOa8IvSAaDqFP+pSOSr2Kihi288+r2UvrNqUhtvuj42Z3SewiZM7e9N33D5igQ5icqn8DjuWe/4t8UNrP6ji0du6uri6WuO9fLpvNpxyx54/kfe9A0tg33AOaO3eWn5o4Mx4zMuHubi8G1GQOm41YhnukRERBFho0tERBSRctu9fEkHv+s2fCn62rzgtiDMK3p3MuB3KX/5kP8w/qlNg5eehx/Av/b+o7181cCnUCXz4y+auvi8GlMT5hu2rq+LG4WeAAYAeSgZx1b1H/4+v+UpLs5btSbiuSHKjl1dgiGgYbX8Otr709+4+LAzg3rZEJ8jFQv/6p8TLm3cy8W3D23mpZ14xjIXz3gheCnJo9taefnevjwoA/OXoSTwTJeIiCgibHSJiIgiUm67lzMt5xi/a/iLa2q5eMWAR2OzO+F38tacs9pL4xt0k9vcTQrPBGDlfe1dXPW70nFF+NnV/Sdod91f2QAABr9JREFUPXBcAxfXYPdy5Pj+3OyoMj2ob2dP919ccBhWxmZPS976DS5uOmqDl/btqCDuevM1Lo69AvruV4MXpdzyu+FeWsWZCzMwl4XjmS4REVFE2OgSERFFhI0uERFRRMrtmO4bq7t40yPqBZeHd83d7eJen/6UUnnHV3vTm+5XNfhefmzmkBuXnufixt8vT+m3yDhYLfEbR8JKy5O9KkmOi8NvPiKi6DT66xwXL32piZd21DvbXTz6mae9tOvuucrF2XxrEc90iYiIIsJGl4iIKCLltnu5wUX+JeUDpwxy8VvtgienhLudi6JX6LL0/Av820M+7PIPFx/5dLVilU9Ap05rXJyftBO/dDigwU1gZWF+icq78G1GADDp1tNdvHGUfxvZY7ePdfGlTa5zcdNRc5BJPNMlIiKKCBtdIiKiiLDRJSIiiki5HdPN37nT/+DUYPqUQf/r4k3dEx931PkiuO+j1kt+///mF/a5eEWXV7y08dubu7ja8o0uLqk33lD01ubt96arbt6fICcRRaXq1OD2wqULE99OtOTKh108cFSPjM4Dz3SJiIgiwkaXiIgoIuW2ezmZapODl8c3n1y8Mlac8oyLY28PefTLPi5uuC61FzZT2TP0nHcTpv3q2RHedNNZmb3tgIxL1vZ28fPNPkiY7+sHT/Sm+dYhir2daOzSfi4e3mdV1n6XZ7pEREQRYaNLREQUkUOye7k4Yl9iDwQvPI69UrX+2CoRzFH5t/vOhi5e8GyOl3ZcbvD0p28mdXRx08HFe8JYcfSoutqbnr9PXNz8/qVeGp9PRVTKHN/Rm3zhxPEufnRbq6z9LM90iYiIIsJGl4iIKCJsdImIiCLCMd0UrRpZOWHa4MVDvekGsxZle3YOCRX+vdjFVz10tZf2yc3jXPyvEx538WX9rvXy5WR4Xax+pZOLe1ZZ6KWdvPgCF9fd/VVGf5cCewad4OLnmz1ZgnNCYWvvOtmbrvJDENcfVzpumcvp0NbFO0bv9tIaV9zr4hmX9QqlZPY6EZ7pEhERRYSNLhERUUTYvZyEntTZxdNOeCwmNbgtSN6vE9EcHbqOmr3Vmz7ulItcvKDHiy5e39e/XavZrPR/e/e5QXfmaycEL7qeuy/Xy1d3DG8Vi0KLP31R0rNA1pbfneTiZUPHeWntZwfDbvX9pLRVbNLYm157YdO4+Vqe5T9Z6tYmL7t43l7/tqBBo4KnyNX9ZG66s5gQz3SJiIgiwkaXiIgoImx0iYiIIsIx3SQ29aju4hYV/fG68JuFKv6koOzK/3SFN93otuCxnJMn13XxtMvu9/KdcfgNLm5z1cdIRLof4+LvT6rlpT15Y/BC6/aVg+PUdtOHefnazpsPyrzwLUJA6rcJ9brq9y5uPZlvFcq2SuI/qvWLvsGb2BavDvaXF8690ssnobh3y69d/OW2I718szpOcnEF+LcC5kNDaUGJj21r4eW7YGawTXQYtdFLq7s+e+O4YTzTJSIiiggbXSIiooiwezmJnw4PuixiX1T/0NYOLq73dDTdEhQ4uPxLFz93RvDy6Sef8tfTjLMfcPFrvbq7+JV/nOLle2ZYcE9D19zE7wQ64/PzXNzu8Z1eGt8kFL1Wrw53ceyL6ash8XACZUa98cG+7+Tdw720TQP2xf3OcyeN96aPzw32s+G3++R7Hc/+LUj5W/wnBLacfCDub1Ve+LU33XbHAhfnxf1G9vFMl4iIKCJsdImIiCLC7uUkLjon8eOMJkzt7+LmYPdyScpbtcbFuRcc4aUN73qdiyvd/J2LF17zsJev3fSrEpbf4s2g4zh31qcuzj+wv8jzSkVXbbLfTXz65C4ubg1elVxa1HxlXsx0/Hyj0S3FEv3hm1ZYnCBfYgeL/I3s45kuERFRRNjoEhERRYSNLhERUUQ4ppvEG6uDsaMR9TL7ImPKjoObN3vTld4NTb8bhAPRw8vXFqk9TYrPHiOidPBMl4iIKCJsdImIiCLC7uUk9P3gQfq3NvYful5/QWm8GJ2IiEoznukSERFFhI0uERFRRNjoEhERRYRjuknUHzvHxZ+N9dOqpniLCRERUQGe6RIREUWEjS4REVFERJXP2CEiIooCz3SJiIgiwkaXiIgoImx0iYiIIsJGl4iIKCJsdImIiCLCRpeIiCgibHSJiIgiwkaXiIgoImx0iYiIIsJGl4iIKCJsdImIiCLCRpeIiCgibHSJiIgiwkaXiIgoImx0iYiIIsJGl4iIKCJsdImIiCLCRpeIiCgibHSJiIgiwkaXiIgoImx0iYiIIsJGl4iIKCJsdImIiCLy/xBTgepmPtNBAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以作业提供的参数运行出来的结果，只看上面几个数字还是很不错的，但是总体准确率不太理想。"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
